package fr.iut2.tc1.client;

import java.util.ArrayList;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Image;

import fr.iut2.tc1.shared.UnTroll;

public class Galerie extends Composite implements ClickHandler {

	private ArrayList<TrollResultSerialized> URLImage;
	private Image[] tabImg;
	private int numImage = 0;
	private int nbImageAfficher = 4;
	private Image img;
	private String trollFocus;
	
	private HorizontalPanel galerie = new HorizontalPanel();
	private HorizontalPanel hPanListe = new HorizontalPanel();
	private Button precedent = new Button("<");
	private Button suivant = new Button(">");	


	private ArrayList<TrollResultSerialized> sauvegardeTroll;
	
	
	public Galerie(ArrayList<TrollResultSerialized> result){
		
		sauvegardeTroll = result;
		trollFocus="";
		
		precedent.setStyleName("btn btnGalerie"); 
		suivant.setStyleName("btn btnGalerie");
		
		this.URLImage = result;
		tabImg = new Image[result.size()];
		
		//on récupère tous les URL
		for(int i = 0; i < result.size(); i++){
			tabImg[i] = new Image("image/" + URLImage.get(i).getURLImage());
			tabImg[i].setTitle(""+i);
		}
		
		//On affiche 4 image sauf si l'on a moin de sauvegarde
		if(result.size() <= 4){
			nbImageAfficher = result.size();
		}else{
			nbImageAfficher = 4;
		}
		
		//on ins�re les 4 premières photo dans le panel
		for(int i = numImage; i < nbImageAfficher; i++){
			img = new Image("image/" + result.get(i).getURLImage());
			img.setTitle(""+i);
			img.setStyleName("imageGalerie"); //ajout d'un style au image de la galerie
			img.addClickHandler(this);
			hPanListe.add(img);
		}		
		hPanListe.setSpacing(5);
		hPanListe.setStyleName("panneauHGalerie");//ajout d'un style sur le panneau des images
		
		//ajout de l'évènement sur click
		suivant.addClickHandler(this);
		precedent.addClickHandler(this);
		
		galerie.add(precedent);
		galerie.add(hPanListe);
		galerie.add(suivant);
		galerie.setSpacing(10);
		
		//On affiche 4 image sauf si l'on a moin de sauvegarde
		if(result.size() <= 4){
			suivant.setEnabled(false);
			precedent.setEnabled(false);
		}else{
			suivant.setEnabled(true);
			precedent.setEnabled(true);
		}
		
		initWidget(galerie);
		
		setStyleName("panneauGalerie");//ajout d'un style sur la galerie		
	}
	
	
	public String getTrollFocus()
	{
		return this.trollFocus;
	}


	@Override
	public void onClick(ClickEvent event) {
		if(event.getSource() == suivant){
			//on efface l'horizontal panel et on r�ins�re les images suivantes
			hPanListe.clear();
			numImage++;
				
			if(numImage == URLImage.size()){
				numImage = 0;
			}
			for(int i = 0; i < 4; i++){
				int numImageF = numImage + i;
				if(numImageF >= URLImage.size()){
					numImageF = numImageF - URLImage.size();
				}
				
				img = new Image("image/" + URLImage.get(numImageF).getURLImage());
				img.setTitle(""+numImageF);
				img.setStyleName("imageGalerie"); //ajout d'un style au image de la galerie
				img.addClickHandler(this);
				hPanListe.add(img);
			}
			
		}else if(event.getSource() == precedent){
			//on efface l'hrizontal panel et on ajoute les images pr�c�dentes
			hPanListe.clear();
			numImage--;
			
			if(numImage < 0){
				numImage = URLImage.size() + numImage;
			}
			for(int i = 0; i < 4; i++){
				int numImageF = numImage + i;
				if(numImageF >= URLImage.size()){
					numImageF = numImageF - URLImage.size();
				}
				
				img = new Image("image/" + URLImage.get(numImageF).getURLImage());
				img.setTitle(""+numImageF);
				img.setStyleName("imageGalerie"); //ajout d'un style au image de la galerie
				img.addClickHandler(this);
				hPanListe.add(img);	
			}
		}
		if(event.getSource().getClass().equals(Image.class))
		{
			for(int i = 0; i < URLImage.size(); i++){
				
				if(((Image)event.getSource()).getTitle().equals(tabImg[i].getTitle()))
				{
					String infoTroll[] = this.sauvegardeTroll.get(i).getText().split("/");
					
					//On crée un Troll
					UnTroll trollChoisi = new UnTroll(this.sauvegardeTroll.get(i).getName().split(".txt")[0],infoTroll[0],this.sauvegardeTroll.get(i).getNomImage());
					trollChoisi.setPointsCompetence(Integer.parseInt(infoTroll[1]), Integer.parseInt(infoTroll[2]));
					trollChoisi.setCaracteristiques(Integer.parseInt(infoTroll[3]), Integer.parseInt(infoTroll[4]), Integer.parseInt(infoTroll[5]), Integer.parseInt(infoTroll[6]), Integer.parseInt(infoTroll[7]));
					
					
					ListeCaractImg.get().afficherDetail(trollChoisi);
					ImageTroll.getAffichagePhoto().setImageTroll(tabImg[i]);
					trollFocus=URLImage.get(i).getName();
					break;
				}
			}
		}
		
	}
}